﻿#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QShortcut>
#include <QWidget>
#include "Model/DataCenter.h"
#include "Style.h"
#include "VerifyCodeWidget.h"
using namespace model;

//////////////////////////////////////////
/// @brief 使用QQ号的登录界面
//////////////////////////////////////////
class PhoneLoginWidget;
class LoginWidget : public QWidget
{
    Q_OBJECT
public:
    LoginWidget(QWidget* parent = nullptr);
    ~LoginWidget();
    static LoginWidget*      get_instance();        // 获取登录窗口实例
    static PhoneLoginWidget* get_phone_instance();  // 获取手机登录窗口实例
protected:
    virtual void toggle_mode();
protected:
    bool                     login_mode = true;                        // 登录模式, 为true表示使用登录模式, 为false表示注册模式
    QLineEdit*               user_edit;                                // 用户名输入框
    QLineEdit*               password_edit;                            // 密码输入框
    QPushButton*             change_to_phone_num;                      // 切换手机号登录按钮
    QPushButton*             register_btn;                             // 注册按钮
    QPushButton*             login_button;                             // 登录按钮
    QGridLayout*             g_layout;                                 // 全局使用的网格布局
    VerifyCodeWidget*        verify_code;                              // 验证码
    QLineEdit*               code_edit;                                // 输入验证码的框
    QString                  LINE_EDIT_STYLE = get_line_edit_style();  // 输入框样式
    QString                  BTN_STYLE       = get_blue_button_style();
    static LoginWidget*      instance;                                 // QQ登录窗口实例
    static PhoneLoginWidget* phone_instance;                           // 手机登录窗口实例
    DataCenter*              data_center;                              // 数据中心类
    QShortcut*               enter_shortcut;                           // 回车快捷键
    QShortcut*               return_shortcut;                          // 回车快捷键
private:
    void init_main_ui();
    void connect_signals();
    void switch_to_phone_login();
    void handle_login_btn_clicked();
    void handle_user_login_done(bool is_ok, const QString& reason);
    void handle_user_register_done(bool is_ok, const QString& reason);
};

//////////////////////////////////////////
/// @brief 使用手机号的登录界面
//////////////////////////////////////////
class PhoneLoginWidget : public LoginWidget
{
    Q_OBJECT
public:
    PhoneLoginWidget(QWidget* parent = nullptr);
    ~PhoneLoginWidget();
protected:
    virtual void toggle_mode();
private:
    void phone_init_ui();
    void connect_signals();
    void handle_get_verify_code_btn_clicked();
    void handle_login_btn_clicked();
    void handle_phone_login_done(bool is_ok, const QString& reason);
    void handle_phone_register_done(bool is_ok, const QString& reason);
    void switch_to_qq_login();
private:
    QPushButton* get_verify_code_btn;  // 获取验证码的按钮
    int          time_cnt = 60;        // 用于倒计时, 每秒-1
    QString      phone_num;            // 保存发送验证码的手机号
};